package com.xiaolin.designmode.singleton;

/**
 * @ClassName LazySingleton
 * @Description 懒汉式
 * @Detail 用到才创建，不用时不创建，线程不安全，加锁时线程安全，有三种
 * @Author MyPC
 * @Date 2020/7/18
 * @Version 1.0
 */
public class LazySingleton {
    //1、定义该对象的静态变量，声明时不先初始化
    private static LazySingleton lazySingleton;
    //2、定义私有构造器,防止被人为创建对象
    private LazySingleton(){

    }
    //3、定义获取实例对象的静态方法
    public static LazySingleton lazySingleton(){
        if(lazySingleton ==null){
            //不加锁时，线程数多时，可能很多线程进入到这里，这时候，进入到这里的线程就会创建对象，导致线程不安全问题
            lazySingleton=new LazySingleton();
        }
        return lazySingleton;
    }

    //3、定义获取实例对象的静态方法，同步方法，线程安全，每次调用方法都要加锁，不推荐使用
    public static synchronized LazySingleton safeLazySingleton1(){
        if(lazySingleton ==null){
            lazySingleton=new LazySingleton();
        }
        return lazySingleton;
    }
}
